UsualToolcms 8.0 前台sql

一、漏洞简介

二、漏洞影响

三、复现过程

漏洞分析

search.php

$key=UsualToolCMS::sqlcheck($_GET["key"]);
$navname="search";
require_once(dirname(__FILE__).'/'.'mytop.php');
//搜索记录
if(!empty($key)):
$asql="SELECT * FROM `cms_search` WHERE keyword ='$key'";
$adata=mysqli_query($mysqli,$asql);
if(mysqli_num_rows($adata)>0):
$mysqli->query("UPDATE `cms_search` SET `hit`=hit+1 WHERE keyword ='$key' and lang='$language'");
else:
$mysqli->query("INSERT INTO `cms_search` (`lang`,`keyword`) VALUES ('$language','$key')");

\$key被sqlcheck函数过滤了,让我们看下这个函数

function sqlchecks($StrPost){
$StrPost=str_replace("'","’",$StrPost);
$StrPost=str_replace('"','“',$StrPost);
$StrPost=str_replace("(","(",$StrPost);
$StrPost=str_replace(")",")",$StrPost);
$StrPost=str_replace("@","#",$StrPost);
$StrPost=str_replace("/*","",$StrPost);
$StrPost=str_replace("*/","",$StrPost);
return $StrPost;
}

如果没有Url编码的话这里应该是不存在漏洞的了,仔细看上面的代码,数据库操作中还有一个\$language,我们追踪下\$language吧

全局查找,直接找到其定义的地方

conn.php

if(!empty($_COOKIE['UTCMSLanguage'])):$language=$_COOKIE['UTCMSLanguage'];else:$language=$indexlanguage;endif;

\$language没有经过任何过滤就从Cookie传了进来

这就简单咯

复现

image